<?php
/**
 * define OM ext device
 *
 * 
 */
namespace OM\Dev;
use OM\Dev\Om;
use OM\Dev\Visitor;


class Ext 
{
 	//const status
 	const EXT_OFFLINE = 0;
 	const EXT_ONLINE  = 1;
 	const EXT_ACTIVE  = 2; //振铃、回铃或通话中
 	const EXT_PROGRESS = 2;
  	const EXT_READY = 1; //空闲可用
 	const EXT_IDLE    = 1;
 	const EXT_BUSY    = 2;
  	const EXT_FAILED = -1;


 	const EXT_REGION_OM    = 0; //拨打内线权限
 	const EXT_REGION_CITY  = 1; // 拨打市话权限
 	const EXT_REGION_CHINA = 2;//拨打国内电话权限
 	const EXT_REGION_WWW   = 3; //拨打国际电话权限

 	/*错误提示信息*/
 	const ERR_MSG_RECONNECT = '该分机账号已经在别的地方登陆!';
 	const ERR_MSG_INIT = "websocket连接初始化信息设置错误";

 	/*websocket分机联系接口*/
 	const API_INIT = 'init'; //分机初始化接口
 	const API_STATE = 'extchange'; //分机状态变化
    const API_CHANGE = 'config'; //分机配置信息发生变化
    const API_DAIL = 'dail';//拨打电话
    const API_MUTE = 'mute';//话机静音接口
 	const API_OFFLINE = 'offline'; //服务器主动关闭与客户端的连接
 	const API_GETLIST = 'extlist'; // 获取OM设备上空闲的分机列表
 	const API_BDMSG = 'broadcast'; //广播消息接口
    const API_INCOMMING = 'incoming'; //来电通知消息
    const API_PING = 'ping'; //客户但与服务器之间ping接口
    const API_CLEAR = 'clear'; //挂断电话
    const API_CDR = 'cdr';//向客户端推送cdr信息
    const API_TRANSFER = 'transfer'; //转接来电信息

 	protected $m_id = '';// 分机号
 	protected $m_lineid = null; //分机线路编号
 	protected $m_groups = null; //所属分组
 	protected $m_staffid = null;//工号
 	protected $m_voicefile = ''; //语音文件
 	protected $m_email = ''; //员工邮件地址
 	protected $m_call_region = 0;// 呼叫权限 0: 内线，1: 市话，2: 国内，3: 国际
 	protected $m_call_picup = 'no'; // 代接权限，是否允许来电被其它分机代接 Yes:允许，no:不允许
 	protected $m_no_disturb = 'off'; // 免打扰功能开关，开启免打扰后分机将屏蔽所有来电，但能主动发起呼叫 on: 开启，off: 关闭
 	protected $m_fwd_type = 0; // 呼叫转移方式 0: 关闭，1: 全转，2: 遇忙或无应答转
 	protected $m_fwd_number = ''; //呼叫转移号码,值为空时关闭
 	protected $m_fork = '';//  同振号码,值为空时关闭
 	protected $m_mobile = '';// 分机绑定的手机号 该手机号可作为呼叫转移、离线转移的缺省配置,值为空时关闭
 	protected $m_record = 'on'; //实时录音功能开关 on: 开启，off: 关闭
 	protected $m_api = 1;//  API的功能开关  0: 关闭API状态监控 7: 开启API状态监控

 	public $m_ws_state = 0;//分机对应销售人员websocket与适配器的连接状态,0：未连接，1:已经链接
    public $m_crm_uid = null; /*登陆CRM之后对应的用户ID*/
    public $m_inuse = 0; /*是否在CRM后端定义员工关联*/
 	/**
 	 * 线路状态
 	 * 
 	 * 	Ready: 空闲可用
	 *	Active: 振铃、回铃或通话中
	 *	Progress：模拟分机摘机后等待拨号以及拨号过程中
	 *	Offline: IP分机离线
	 *	Offhook：模拟分机听催挂音时的状态
 	 */
 	protected $m_state = null;//线路状态,默认是可用的

 	protected $m_outer = null;
 	protected $m_visitor = null;
 	protected $m_ext = null;

 	function __construct()
 	{
 		$this->m_state = self::EXT_READY ; 
 		$this->m_groups = array();
 		$this->m_call_region = self::EXT_REGION_CHINA; //默认是拨打国内电话
 	}

 	public function __set($n,$v) { 
		$var = 'm_'.$n;
		return $this->$var = $v; 
	}

	public function __get($name) { 
		$var = 'm_'.$name;
		if( !isset( $this->$var ) )
			return false;
		else
			return $this->$var; 
	}

    public static function failedMsg( $failedCode ){
       $errMsg = array('1'=>'失败','2'=>'主叫的呼叫权限受限','3'=>'被叫分机不在线','4'=>'被叫分机当前正在和其他终端通话',
                        '5'=>'中继线资源不足，无法执行外呼','6'=>'被叫分机忙线','7'=>'分机不存在',
                        '8'=>'主叫分机自身不在线');
        if( !$failedCode )
            return '';
        return isset( $errMsg[$failedCode] )  ? $errMsg[$failedCode]  : $failedCode;

    }
}
?>